<!DOCTYPE html>












  


<html class="theme-next pisces use-motion" lang="zh-CN">
<head><meta name="generator" content="Hexo 3.8.0">
  <meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2">
<meta name="theme-color" content="#222">
























<link rel="stylesheet" href="/lib/font-awesome/css/font-awesome.min.css?v=4.6.2">

<link rel="stylesheet" href="/css/main.css?v=7.1.0">


  <link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon-next.png?v=7.1.0">


  <link rel="icon" type="image/png" sizes="32x32" href="/images/logo1.jpg?v=7.1.0">


  <link rel="icon" type="image/png" sizes="16x16" href="/images/logo1.jpg?v=7.1.0">


  <link rel="mask-icon" href="/images/logo.svg?v=7.1.0" color="#222">







<script id="hexo.configurations">
  var NexT = window.NexT || {};
  var CONFIG = {
    root: '/',
    scheme: 'Pisces',
    version: '7.1.0',
    sidebar: {"position":"left","display":"post","offset":12,"onmobile":false,"dimmer":false},
    back2top: true,
    back2top_sidebar: false,
    fancybox: false,
    fastclick: false,
    lazyload: false,
    tabs: true,
    motion: {"enable":true,"async":false,"transition":{"post_block":"fadeIn","post_header":"slideDownIn","post_body":"slideDownIn","coll_header":"slideLeftIn","sidebar":"slideUpIn"}},
    algolia: {
      applicationID: '',
      apiKey: '',
      indexName: '',
      hits: {"per_page":10},
      labels: {"input_placeholder":"Search for Posts","hits_empty":"We didn't find any results for the search: ${query}","hits_stats":"${hits} results found in ${time} ms"}
    }
  };
</script>


  




  <meta name="description" content="前面说到公司在做数据平台，选取了 Mysql -&amp;gt; Canal -&amp;gt; Kafka -&amp;gt; Spark Streaming -&amp;gt; (Kudu + Impala) 的设计方案，上层由Ad-hoc封装，提供http协议的接口访问。 这种方案在初期基本满足需求，但是随着业务数据量日益膨胀，开始出现各种问题，第一个严重问题就是查询性能，大批量的接口开始查询超时，导致很多功能都无法使用了">
<meta name="keywords" content="数据同步">
<meta property="og:type" content="article">
<meta property="og:title" content="数据仓库迁移">
<meta property="og:url" content="https://luoo.oschina.io/2018/09/05/tech/数据仓库迁移/index.html">
<meta property="og:site_name" content="从你的全世界路过">
<meta property="og:description" content="前面说到公司在做数据平台，选取了 Mysql -&amp;gt; Canal -&amp;gt; Kafka -&amp;gt; Spark Streaming -&amp;gt; (Kudu + Impala) 的设计方案，上层由Ad-hoc封装，提供http协议的接口访问。 这种方案在初期基本满足需求，但是随着业务数据量日益膨胀，开始出现各种问题，第一个严重问题就是查询性能，大批量的接口开始查询超时，导致很多功能都无法使用了">
<meta property="og:locale" content="zh-CN">
<meta property="og:image" content="https://luoo.oschina.io/images/data-link/2016082210501810.png">
<meta property="og:updated_time" content="2019-04-14T12:28:00.753Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="数据仓库迁移">
<meta name="twitter:description" content="前面说到公司在做数据平台，选取了 Mysql -&amp;gt; Canal -&amp;gt; Kafka -&amp;gt; Spark Streaming -&amp;gt; (Kudu + Impala) 的设计方案，上层由Ad-hoc封装，提供http协议的接口访问。 这种方案在初期基本满足需求，但是随着业务数据量日益膨胀，开始出现各种问题，第一个严重问题就是查询性能，大批量的接口开始查询超时，导致很多功能都无法使用了">
<meta name="twitter:image" content="https://luoo.oschina.io/images/data-link/2016082210501810.png">



  <link rel="alternate" href="/atom.xml" title="从你的全世界路过" type="application/atom+xml">



  
  
  <link rel="canonical" href="https://luoo.oschina.io/2018/09/05/tech/数据仓库迁移/">



<script id="page.configurations">
  CONFIG.page = {
    sidebar: "",
  };
</script>

  <title>数据仓库迁移 | 从你的全世界路过</title>
  












  <noscript>
  <style>
  .use-motion .motion-element,
  .use-motion .brand,
  .use-motion .menu-item,
  .sidebar-inner,
  .use-motion .post-block,
  .use-motion .pagination,
  .use-motion .comments,
  .use-motion .post-header,
  .use-motion .post-body,
  .use-motion .collection-title { opacity: initial; }

  .use-motion .logo,
  .use-motion .site-title,
  .use-motion .site-subtitle {
    opacity: initial;
    top: initial;
  }

  .use-motion .logo-line-before i { left: initial; }
  .use-motion .logo-line-after i { right: initial; }
  </style>
</noscript>

</head>

<body itemscope itemtype="http://schema.org/WebPage" lang="zh-CN">

  
  
    
  

  <div class="container sidebar-position-left page-post-detail">
    <div class="headband"></div>

    <header id="header" class="header" itemscope itemtype="http://schema.org/WPHeader">
      <div class="header-inner"><div class="site-brand-wrapper">
  <div class="site-meta">
    

    <div class="custom-logo-site-title">
      <a href="/" class="brand" rel="start">
        <span class="logo-line-before"><i></i></span>
        <span class="site-title">从你的全世界路过</span>
        <span class="logo-line-after"><i></i></span>
      </a>
    </div>
    
      
        <p class="site-subtitle">心智渐开，世事渐杂</p>
      
    
    
  </div>

  <div class="site-nav-toggle">
    <button aria-label="切换导航栏">
      <span class="btn-bar"></span>
      <span class="btn-bar"></span>
      <span class="btn-bar"></span>
    </button>
  </div>
</div>



<nav class="site-nav">
  
    <ul id="menu" class="menu">
      
        
        
        
          
          <li class="menu-item menu-item-home">

    
    
    
      
    

    

    <a href="/" rel="section"><i class="menu-item-icon fa fa-fw fa-home"></i> <br>首页</a>

  </li>
        
        
        
          
          <li class="menu-item menu-item-categories">

    
    
    
      
    

    

    <a href="/categories/" rel="section"><i class="menu-item-icon fa fa-fw fa-th"></i> <br>分类</a>

  </li>
        
        
        
          
          <li class="menu-item menu-item-tags">

    
    
    
      
    

    

    <a href="/tags/" rel="section"><i class="menu-item-icon fa fa-fw fa-tags"></i> <br>标签</a>

  </li>
        
        
        
          
          <li class="menu-item menu-item-archives">

    
    
    
      
    

    

    <a href="/archives/" rel="section"><i class="menu-item-icon fa fa-fw fa-archive"></i> <br>归档</a>

  </li>
        
        
        
          
          <li class="menu-item menu-item-schedule">

    
    
    
      
    

    

    <a href="/schedule/" rel="section"><i class="menu-item-icon fa fa-fw fa-calendar"></i> <br>计划</a>

  </li>
        
        
        
          
          <li class="menu-item menu-item-you">

    
    
    
      
    

    

    <a href="/you/" rel="section"><i class="menu-item-icon fa fa-fw fa-heartbeat"></i> <br>知遇</a>

  </li>
        
        
        
          
          <li class="menu-item menu-item-about">

    
    
    
      
    

    

    <a href="/about/" rel="section"><i class="menu-item-icon fa fa-fw fa-user"></i> <br>关于</a>

  </li>

      
      
    </ul>
  

  

  
</nav>



  



</div>
    </header>

    


    <main id="main" class="main">
      <div class="main-inner">
        <div class="content-wrap">
          
            

          
          <div id="content" class="content">
            

  <div id="posts" class="posts-expand">
    

  

  
  
  

  

  <article class="post post-type-normal" itemscope itemtype="http://schema.org/Article">
  
  
  
  <div class="post-block">
    <link itemprop="mainEntityOfPage" href="https://luoo.oschina.io/2018/09/05/tech/数据仓库迁移/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="name" content="方林">
      <meta itemprop="description" content="愿你出走半生，归来仍是少年">
      <meta itemprop="image" content="/images/logo1.jpg">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="从你的全世界路过">
    </span>

    
      <header class="post-header">

        
        
          <h1 class="post-title" itemprop="name headline">数据仓库迁移

              
            
          </h1>
        

        <div class="post-meta">
          <span class="post-time">

            
            
            

            
              <span class="post-meta-item-icon">
                <i class="fa fa-calendar-o"></i>
              </span>
              
                <span class="post-meta-item-text">发表于</span>
              

              
                
              

              <time title="创建时间：2018-09-05 14:20:25" itemprop="dateCreated datePublished" datetime="2018-09-05T14:20:25+08:00">2018-09-05</time>
            

            
          </span>

          
            <span class="post-category">
            
              <span class="post-meta-divider">|</span>
            
              <span class="post-meta-item-icon">
                <i class="fa fa-folder-o"></i>
              </span>
              
                <span class="post-meta-item-text">分类于</span>
              
              
                <span itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/categories/编程技术/" itemprop="url" rel="index"><span itemprop="name">编程技术</span></a></span>

                
                
              
            </span>
          

          
            
            
              
              <span class="post-comments-count">
                <span class="post-meta-divider">|</span>
                <span class="post-meta-item-icon">
                  <i class="fa fa-comment-o"></i>
                </span>
            
                <span class="post-meta-item-text">评论数：</span>
                <a href="/2018/09/05/tech/数据仓库迁移/#comments" itemprop="discussionUrl">
                  <span class="post-comments-count valine-comment-count" data-xid="/2018/09/05/tech/数据仓库迁移/" itemprop="commentCount"></span>
                </a>
              </span>
            
          

          
          

          

          

          

        </div>
      </header>
    

    
    
    
    <div class="post-body" itemprop="articleBody">

      
      

      
        <p>前面说到公司在做数据平台，选取了 Mysql -&gt; Canal -&gt; Kafka -&gt; Spark Streaming -&gt; (Kudu + Impala) 的设计方案，上层由Ad-hoc封装，提供http协议的接口访问。</p>
<p>这种方案在初期基本满足需求，但是随着业务数据量日益膨胀，开始出现各种问题，第一个严重问题就是查询性能，大批量的接口开始查询超时，导致很多功能都无法使用了。</p>
<a id="more"></a>
<h2 id="引言"><a href="#引言" class="headerlink" title="引言"></a>引言</h2><p>在遇到这个问题前，我并不清楚OLAP和OLTP这两个概念，在寻求了一系列解决方案之后，才第一次接触OLAP和OLTP这两个概念，也指明了问题解决的方向。</p>
<p>联机分析处理 (OLAP) 的概念最早是由关系数据库之父E.F.Codd于1993年提出的，OLAP的被提出后，作为一类产品同联机事务处理 (OLTP) 明显区分开来。</p>
<ul>
<li><p>OLTP</p>
<p>  OLTP是传统的关系型数据库的主要应用，主要是基本的、日常的事务处理，例如银行交易。</p>
<p>  OLTP系统强调数据库内存效率，强调内存各种指标的命令率，强调绑定变量，强调并发操作。</p>
</li>
<li><p>OLAP</p>
<p>  OLAP是数据仓库系统的主要应用，支持复杂的分析操作，侧重决策支持，并且提供直观易懂的查询结果。 </p>
<p>  OLAP系统强调数据分析，强调SQL执行市场，强调磁盘I/O，强调分区等。 </p>
</li>
</ul>
<h2 id="选择之误"><a href="#选择之误" class="headerlink" title="选择之误"></a>选择之误</h2><p>由于在产品设计之初我们并没考虑清除产品的定位，只是单纯地以为数据平台是一个数据仓库加上数据处理中心，而忽略了产品层面设计的两个特点：数据实时同步和指标数据实时计算（典型的OLTP特征）。</p>
<p>从而选择了Kudu这种OLAP类型的数据存储，导致了最终的性能问题，最终不得不迁移数据仓库。</p>
<p>其实产品设计中数据平台不只是有OLTP的特征，也有OLAP的特性，它允许有开放式的查询窗口，可以进行任意查询，</p>
<p>这种开放式查询窗口其实是一个特别头疼的存在，当我们采用OLAP数据仓库时还好，当迁移到OLTP系统上时，这种查询就有点hold不住了。</p>
<p>经过一番考虑之后，我们最终还是选择了最熟悉的Mysql作为数据仓库，它能满足我们的基本需求，接下来就是数据迁移了。</p>
<h2 id="数据迁移"><a href="#数据迁移" class="headerlink" title="数据迁移"></a>数据迁移</h2><p>从Kudu迁移数据到mysql是个比较大的难题，因为Kudu提供的Api接口中只有写接口，没有读查询接口，必须借助Impala来进行查询，而Impala查询效率也不是很好，数据量大的表迁移出来相当耗时。</p>
<p>在网上查了一下相关解决方案，最终选择了将Kudu中的数据导出为切片csv文件，通过程序读取csv文件导入到mysql中，绕了一点弯路。</p>
<p>我们将Kudu中的每个表按照20个切片csv导出来后，采用线程池的方式并发读取数据导入，至于线程池的最大线程数量，看数据库压力而定，保证线上服务稳定。</p>
<h2 id="增量迁移"><a href="#增量迁移" class="headerlink" title="增量迁移"></a>增量迁移</h2><p>之前增量数据采用Spark Streaming写入Kudu，数据仓库切换mysql后，Spark也不必用了，于是自己写了一套消费程序多进程消费，消费速度跟Spark相比丝毫不逊色。</p>
<p>增量迁移其实存在很多细节问题，可能会导致数据丢失，因为在数据迁移完之后，有很多因素导致无法确定Kafka的Offset从哪个地方开始消费是准确的。</p>
<p>于是尽量选择了一个从理论上近似正确的位置，接着消费，后续检查数据存在问题再进行修复。</p>
<p>很多天之后，事实证明，数据的确存在问题，于是为了保证数据的正确性，我们选择性地把操作切换那一天的数据全量刷了一遍。</p>
<h2 id="切换服务"><a href="#切换服务" class="headerlink" title="切换服务"></a>切换服务</h2><p>在完成数据从Kudu迁移到Mysql中后，我们需要把线上查询服务也从Kudu切换到Mysql，这个时候就面临一个很严峻的问题：索引。</p>
<p>Kudu中是不存在索引这个概念的，而大量数据的mysql离开了索引就跟废物没啥区别了，所以体力活就来了，统计所有的查询SQL，添加索引。</p>
<h2 id="尾记"><a href="#尾记" class="headerlink" title="尾记"></a>尾记</h2><p>添加一个好的索引其实是一件特别难的事，有空的话后面再写一篇文章关于添加索引的。</p>
<p>另外，关于数据平台的交互设计，大部分设计的都是网页同步等待后端接口数据，其实这样存在很多问题，因为很多指标计算比较复杂，需要十几秒甚至更长的时间，而线上nginx设置了最迟链接时间为10秒，超过10s的接口就自动断开了，这种指标在线上全部都超时根本展示不出来，因此有很多计算需要改成异步任务，最典型的就是数据平台有一个开放式查询窗口，虽然有权限控制表和字段级别的数据，但是这种开放式窗口查询经常会执行一些无法命中索引的查询，一个任务跑个10分钟半小时，也是常事，这个就必须依赖异步任务了。</p>
<p>另外，我发现在Kafka中的增量日志中，居然存在delete操作，按照开发规范，线上服务所有的删除只能是软删除，不允许直接物理删除数据，那么这种delete操作怎么出现的就比较奇怪了，花了半天调查终于让我找到了蛛丝马迹，原来这些删除都是事务执行失败后的回滚操作</p>
<p><img src="/images/data-link/2016082210501810.png" alt="transaction"></p>
<p>MYSQL事务的提交主要分为两个主要步骤：</p>
<ol>
<li><p>准备阶段（Storage Engine（InnoDB） Transaction Prepare Phase）</p>
<p> 此时SQL已经成功执行，并生成xid信息及redo和undo的内存日志。然后调用prepare方法完成第一阶段，papare方法实际上什么也没做，将事务状态设为TRX_PREPARED，并将redo log刷磁盘。</p>
</li>
<li><p>提交阶段(Storage Engine（InnoDB）Commit Phase)</p>
<p> 2.1 记录协调者日志，即Binlog日志。</p>
<p> 如果事务涉及的所有存储引擎的prepare都执行成功，则调用TC_LOG_BINLOG::log_xid方法将SQL语句写到binlog（write()将binary log内存日志数据写入文件系统缓存，fsync()将binary log文件系统缓存日志数据永久写入磁盘）。此时，事务已经铁定要提交了。</p>
<p> 2.2 告诉引擎做commit。</p>
<p> 最后，调用引擎的commit完成事务的提交。会清除undo信息，刷redo日志，将事务设为TRX_NOT_STARTED状态。</p>
</li>
</ol>

      
    </div>

    

    
    
    

    

    
      
    
    

    

    <footer class="post-footer">
      
        <div class="post-tags">
          
            <a href="/tags/数据同步/" rel="tag"># 数据同步</a>
          
        </div>
      

      
      
      

      
        <div class="post-nav">
          <div class="post-nav-next post-nav-item">
            
              <a href="/2018/04/21/tech/数据平台底层链路搭建/" rel="next" title="数据平台底层链路搭建">
                <i class="fa fa-chevron-left"></i> 数据平台底层链路搭建
              </a>
            
          </div>

          <span class="post-nav-divider"></span>

          <div class="post-nav-prev post-nav-item">
            
              <a href="/2019/04/27/jottings/toFanglin/" rel="prev" title="致芳林">
                致芳林 <i class="fa fa-chevron-right"></i>
              </a>
            
          </div>
        </div>
      

      
      
    </footer>
  </div>
  
  
  
  </article>


  </div>


          </div>
          

  
    <div class="comments" id="comments">
    </div>

  



        </div>
        
          
  
  <div class="sidebar-toggle">
    <div class="sidebar-toggle-line-wrap">
      <span class="sidebar-toggle-line sidebar-toggle-line-first"></span>
      <span class="sidebar-toggle-line sidebar-toggle-line-middle"></span>
      <span class="sidebar-toggle-line sidebar-toggle-line-last"></span>
    </div>
  </div>

  <aside id="sidebar" class="sidebar">
    <div class="sidebar-inner">

      

      
        <ul class="sidebar-nav motion-element">
          <li class="sidebar-nav-toc sidebar-nav-active" data-target="post-toc-wrap">
            文章目录
          </li>
          <li class="sidebar-nav-overview" data-target="site-overview-wrap">
            站点概览
          </li>
        </ul>
      

      <div class="site-overview-wrap sidebar-panel">
        <div class="site-overview">
          <div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
            
              <img class="site-author-image" itemprop="image" src="/images/logo1.jpg" alt="方林">
            
              <p class="site-author-name" itemprop="name">方林</p>
              <div class="site-description motion-element" itemprop="description">愿你出走半生，归来仍是少年</div>
          </div>

          
            <nav class="site-state motion-element">
              
                <div class="site-state-item site-state-posts">
                
                  <a href="/archives/">
                
                    <span class="site-state-item-count">27</span>
                    <span class="site-state-item-name">日志</span>
                  </a>
                </div>
              

              
                
                
                <div class="site-state-item site-state-categories">
                  
                    
                      <a href="/categories/">
                    
                  
                    
                    
                      
                    
                      
                    
                      
                    
                    <span class="site-state-item-count">3</span>
                    <span class="site-state-item-name">分类</span>
                  </a>
                </div>
              

              
                
                
                <div class="site-state-item site-state-tags">
                  
                    
                      <a href="/tags/">
                    
                  
                    
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                      
                    
                    <span class="site-state-item-count">17</span>
                    <span class="site-state-item-name">标签</span>
                  </a>
                </div>
              
            </nav>
          

          
            <div class="feed-link motion-element">
              <a href="/atom.xml" rel="alternate">
                <i class="fa fa-rss"></i>
                RSS
              </a>
            </div>
          

          

          
            <div class="links-of-author motion-element">
              
                <span class="links-of-author-item">
                  
                  
                    
                  
                  
                    
                  
                  <a href="https://github.com/yourname" title="GitHub &rarr; https://github.com/yourname" rel="noopener" target="_blank"><i class="fa fa-fw fa-github"></i>GitHub</a>
                </span>
              
                <span class="links-of-author-item">
                  
                  
                    
                  
                  
                    
                  
                  <a href="mailto:sean_ps@163.com" title="E-Mail &rarr; mailto:sean_ps@163.com" rel="noopener" target="_blank"><i class="fa fa-fw fa-envelope"></i>E-Mail</a>
                </span>
              
            </div>
          

          

          
          
            <div class="links-of-blogroll motion-element links-of-blogroll-block">
              <div class="links-of-blogroll-title">
                <i class="fa  fa-fw fa-link"></i>
                Links
              </div>
              <ul class="links-of-blogroll-list">
                
                  <li class="links-of-blogroll-item">
                    <a href="http://www.luoo.net" title="http://www.luoo.net" rel="noopener" target="_blank">落网</a>
                  </li>
                
              </ul>
            </div>
          

          
            
          
          

        </div>
      </div>

      
      <!--noindex-->
        <div class="post-toc-wrap motion-element sidebar-panel sidebar-panel-active">
          <div class="post-toc">

            
            
            
            

            
              <div class="post-toc-content"><ol class="nav"><li class="nav-item nav-level-2"><a class="nav-link" href="#引言"><span class="nav-number">1.</span> <span class="nav-text">引言</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#选择之误"><span class="nav-number">2.</span> <span class="nav-text">选择之误</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#数据迁移"><span class="nav-number">3.</span> <span class="nav-text">数据迁移</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#增量迁移"><span class="nav-number">4.</span> <span class="nav-text">增量迁移</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#切换服务"><span class="nav-number">5.</span> <span class="nav-text">切换服务</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#尾记"><span class="nav-number">6.</span> <span class="nav-text">尾记</span></a></li></ol></div>
            

          </div>
        </div>
      <!--/noindex-->
      

      

    </div>
  </aside>
  


        
      </div>
    </main>

    <footer id="footer" class="footer">
      <div class="footer-inner">
        <div class="copyright">&copy; <span itemprop="copyrightYear">2019</span>
  <span class="with-love" id="animate">
    <i class="fa fa-user"></i>
  </span>
  <span class="author" itemprop="copyrightHolder">fanglin</span>

  

  
</div>









        








        
      </div>
    </footer>

    
      <div class="back-to-top">
        <i class="fa fa-arrow-up"></i>
        
      </div>
    

    

    

    
  </div>

  

<script>
  if (Object.prototype.toString.call(window.Promise) !== '[object Function]') {
    window.Promise = null;
  }
</script>


























  
  <script src="/lib/jquery/index.js?v=2.1.3"></script>

  
  <script src="/lib/velocity/velocity.min.js?v=1.2.1"></script>

  
  <script src="/lib/velocity/velocity.ui.min.js?v=1.2.1"></script>


  


  <script src="/js/utils.js?v=7.1.0"></script>

  <script src="/js/motion.js?v=7.1.0"></script>



  
  


  <script src="/js/affix.js?v=7.1.0"></script>

  <script src="/js/schemes/pisces.js?v=7.1.0"></script>



  
  <script src="/js/scrollspy.js?v=7.1.0"></script>
<script src="/js/post-details.js?v=7.1.0"></script>



  


  <script src="/js/next-boot.js?v=7.1.0"></script>


  

  

  

  
  

<script src="//cdn1.lncld.net/static/js/3.11.1/av-min.js"></script>



<script src="//unpkg.com/valine/dist/Valine.min.js"></script>

<script>
  var GUEST = ['nick', 'mail', 'link'];
  var guest = 'nick,mail,link';
  guest = guest.split(',').filter(function(item) {
    return GUEST.indexOf(item) > -1;
  });
  new Valine({
    el: '#comments',
    verify: true,
    notify: false,
    appId: 'jjdDCzDO6jlN5yOgAbnVwdJ3-gzGzoHsz',
    appKey: 'jnjP7aorboCG7pJV6HvdMP15',
    placeholder: 'ヾﾉ≧∀≦)o来啊，快活啊!',
    avatar: 'mm',
    meta: guest,
    pageSize: '10' || 10,
    visitor: false,
    lang: 'zh-cn' || 'zh-cn'
  });
</script>




  


  




  

  

  

  

  

  

  

  

  

  

  

  

  

  

</body>
</html>
